/*
 * @Author: lixu lixu@puchigames.com
 * @Date: 2025-07-03 16:43:02
 * @LastEditors: lixu lixu@puchigames.com
 * @LastEditTime: 2025-07-03 16:48:52
 * @FilePath: /go-helper/utils/ternary.go
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
package ixUtils

// Ternary 三元运算符函数，条件为 true 返回 a，否则返回 b
func Ternary[T any](cond bool, a, b T) T {
	if cond {
		return a
	}
	return b
}

// result := Ternary(a > b, "大于", "小于等于")
//num := Ternary(flag, 1, 0)

// Coalesce 返回第一个非零值，否则返回默认值
// s := Coalesce("", "默认值", "其他") // 返回 "默认值"
func Coalesce[T comparable](values ...T) T {
	var zero T
	for _, v := range values {
		if v != zero {
			return v
		}
	}
	return zero
}

// IfErr error 不为 nil 返回 b，否则返回 a
// result := IfErr(err, data, defaultData)
func IfErr[T any](err error, a, b T) T {
	if err != nil {
		return b
	}
	return a
}

// Default 如果 v 为零值则返回 def，否则返回 v
func Default[T comparable](v, def T) T {
	var zero T
	if v == zero {
		return def
	}
	return v
}

// PtrOrVal 指针不为 nil 返回指针指向的值，否则返回默认值
func PtrOrVal[T any](ptr *T, def T) T {
	if ptr != nil {
		return *ptr
	}
	return def
}
